# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/10/18
# @File : 28.LCIS.py
# 求 find their longest common increasing subsequence最长公共严格递增子序列。难！
# https://blog.csdn.net/weixin_44178736/article/details/107822450?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242
"""
以一个数列为基准进行匹配另一个数列。
dp[i][j]表示a的前i个和b的前j个中并以b[j]为结尾的最大公共上升子序列的长度。因为要保证有上升的条件。
【为什么要以b[j]结尾？如果不以b[j]结尾，那么我们求出的dp[i-1][k]也不一定是k结尾，所谓dp[i][j]只是表示“a的前i个和b的前j个中的最长公共子序列长度”，这样就无法保证我们选择的b[k]<b[j] 也就无法保证子序列单调递增】
最后，只要在所有的dp[n][1-j]中选择最大的就可以，因为dp[n][j]一定是以b[j]结尾的公共上升子序列中最大的。
三重循环：
for(i=1;i<=n;++i)
    for(j=1;j<=m;++j)
        if(a[i]==b[j])
            for(k=0;k<j;++k)
                if(b[k]<b[j]) dp[i][j]=max(dp[i][j],dp[i-1][k]+1); #dp[i][j]=max(dp[i-1][k])+1,(k<j,且b[j]>b[k])
        else dp[i][j]=dp[i-1][j];

但是，这个算法最关键的是，如果按照一个合理的递推顺序，max(dp[i-1][k])的值我们可以在之前访问dp[i][k]的时候通过维护更新一个max变量得到。
而对于 j 的一次循环，a[i]是没有发生变化的 这就使得b[k]<a[i]是一个固定的条件 每次我们 j 增大1，就看当前的 b[j]与 a[i] 的关系
"""
def output(w,pre_k):#往回找
    if(w != -1):
        output(pre_k[w],pre_k)
        print(b[w-1],end=" ")

def dp_solve():
    dp = [[0]*(m+1) for _ in range(n+1)]
    pre_k = [-1] * (m+1)# j是可能从不同的地方转移而来 用pre_k[j]记录其上一个匹配的数字在被匹配串b中的位置，即由哪个位置转移过来。
    for i in range(1,n+1):
        max_k = 0
        k = -1
        for j in range(1,m+1):
            if a[i-1]!=b[j-1]:
                dp[i][j] = dp[i-1][j]
                if a[i-1]>b[j-1] and max_k < dp[i-1][j] :#a[i-1]在内层循环没有发生变化
                    max_k = dp[i-1][j]
                    k = j#更新前序位置
            else:
                dp[i][j] = max_k + 1
                pre_k[j] = k#赋值刚刚更新好的前序位置给当前的j

    ans = 0
    w = 0
    for index,value in enumerate(dp[-1]):
        if(value > ans):
            ans = value
            w = index

    print(ans)
    if(ans):
        output(w,pre_k)#递归输出其中一个LCIS




if __name__ == '__main__':
    n = int(input())
    a = [int(i) for i in input().split()]
    m = int(input())
    b = [int(i) for i in input().split()]
    ans = dp_solve()



